This demo is an entirely automated report – all charts and tables, as well as all figures within the text have been generated from the data, with no manual input. This report makes use of the outputs generated by 5W_cleaning.Rmd, which automates the cleaning of 5W data. The 5W data used has had partner information removed.
Summary of beneficiaries by activity, with sex ratio
| DISTRIBUCION DE KITS DE MATERIALES ESCOLARES |
471,568 |
50.88 |
232,197 |
239,372 |
0.97 |
| ALIMENTACION ESCOLAR |
156,926 |
16.93 |
72,139 |
84,787 |
0.85 |
| EDUCACION A DISTANCIA |
132,258 |
14.27 |
64,240 |
68,018 |
0.94 |
| APOYO PSICOEDUCATIVO PARA NNA |
120,887 |
13.04 |
54,859 |
66,028 |
0.83 |
| FORMACION DOCENTE Y OTRO PERSONAL EDUCATIVO |
17,238 |
1.86 |
3,470 |
13,224 |
0.26 |
| ACTIVIDADES CON ADOLESCENTES Y JOVENES DE NIVELACION, HABILIDADES PARA LA VIDA Y CAPACITACION TECNICA |
14,016 |
1.51 |
6,336 |
7,680 |
0.82 |
| BECAS Y OTROS INCENTIVOS PARA DOCENTES Y PERSONAL |
5,744 |
0.62 |
1,572 |
4,172 |
0.38 |
| ACTIVIDADES RECREATIVAS |
4,317 |
0.47 |
1,998 |
2,319 |
0.86 |
| INICIATIVAS PARA REINSERCION EDUCATIVA DE NNA FUERA DE LA ESCUELA |
3,869 |
0.42 |
2,114 |
1,755 |
1.2 |
A total of 728,408 individuals have been reached to date. In terms of frequencies (inclusive of double counting), 926,823 have been reached.
Additionally, the 4,746,671 beneficiary frequencies reached by the activity PROMOCION MENSAJES CLAVES PARA LA COMUNIDAD ESCOLAR have been removed from the totals in this report as the activity consists of solely radio messaging.
Beneficiaries by age
unique beneficiaries or individuals

Beneficiaries by age compared to 2017 Enrolment
With reference to the 2017 Matricula dataset, we can see that the Education programme has reached an overall average of 9% of schoolgoing children aged 3-17 nationwide. Children aged 3-17 consitute 88% of all UNICEF beneficiaries.
| 3-6 |
121,169 |
1,438,475 |
8.423 |
| 7-12 |
352,808 |
3,252,505 |
10.85 |
| 12-17 |
169,771 |
2,205,724 |
7.697 |
Changes since previous month
The number of individuals reached has increased by 175,005 in the past month, reaching a total of 728,408. The number of beneficiary frequencies reached has increased by 218,443 in the same period, reaching a total of 926,823.

Progress by activity by month
mouse over to see details
Progress in recent months has largely been due to the distribution of education kits and distance learning.
Summaries by geography
Beneficiaries by state

Number of Schools by State
A total of 2,229 schools have been reached by UNICEF; 44% are from Miranda and Zulia alone.

Scatterplot of Municipalities
logarithmic scale; larger points indicate more beneficiaries reached, darker blues indicate more activity types
mouse over municipalities to see beneficiaries and distinct activities
A total of 110 municipalities were reached by the UNICEF Education programme.
Top 10 municipalities by reach and coverage
by beneficiaries
|
estado
|
municipio
|
beneficiarios
|
|
DISTRITO CAPITAL
|
LIBERTADOR
|
80482
|
|
MIRANDA
|
SUCRE
|
59176
|
|
ZULIA
|
MARACAIBO
|
55370
|
|
BOLIVAR
|
CARONI
|
37908
|
|
ZULIA
|
SAN FRANCISCO
|
29369
|
|
AMAZONAS
|
ATURES
|
22430
|
|
LARA
|
IRIBARREN
|
21977
|
|
BOLIVAR
|
HERES
|
18293
|
|
DELTA AMACURO
|
TUCUPITA
|
17953
|
|
BOLIVAR
|
CEDENO
|
15681
|
by coverage
|
estado
|
municipio
|
coverage_percent
|
|
TACHIRA
|
FERNANDEZ FEO
|
87
|
|
TACHIRA
|
AYACUCHO
|
79
|
|
ZULIA
|
MACHIQUES DE PERIJA
|
79
|
|
AMAZONAS
|
AUTONOMO AUTANA
|
76
|
|
TACHIRA
|
SAMUEL DARIO MALDONADO
|
75
|
|
TACHIRA
|
PANAMERICANO
|
72
|
|
MIRANDA
|
PLAZA
|
68
|
|
TACHIRA
|
INDEPENDENCIA
|
68
|
|
TACHIRA
|
JUNIN
|
65
|
|
MIRANDA
|
EL HATILLO
|
64
|
Together, the 10 municipalities with the highest reach (above left) form 49% of the 728,400 beneficiaries reached. The average coverage of the school-age population in the municipalities where UNICEF is present is 20%. Coverage refers to the percentage of enrolled children (aged 3-17 years) reached by UNICEF.
Histogram of Coverage
Below is a histogram of munciipalities where UNICEF is present showing the coverage of enrolled children (aged 3-17). Of note, we have reached 10% or less of the population in 55 out of the 110 in which we operate. This is in addition to the 226 where no UNICEF Education activities have occurred.

Reports about Partners
Number of different activities implemented by each partner
| partner |
SOCIO 2 |
SOCIO 1 |
SOCIO 4 |
SOCIO 5 |
UNICEF |
SOCIO 3 |
SOCIO 6 |
SOCIO 7 |
SOCIO 10 |
SOCIO 8 |
| num_activities |
9 |
8 |
8 |
6 |
6 |
4 |
2 |
2 |
1 |
1 |
Partners’ progress over time
mouse over for details
Summary table about partners’ achievements
| UNICEF |
353,944 |
38.19 |
168,281 |
185,664 |
0.91 |
74 |
| SOCIO 1 |
160,260 |
17.29 |
79,958 |
80,302 |
1 |
92 |
| SOCIO 2 |
146,451 |
15.8 |
65,494 |
80,957 |
0.81 |
51 |
| SOCIO 5 |
113,845 |
12.28 |
50,511 |
63,334 |
0.8 |
10 |
| SOCIO 4 |
86,074 |
9.29 |
42,534 |
43,540 |
0.98 |
17 |
| SOCIO 7 |
31,322 |
3.38 |
14,750 |
16,572 |
0.89 |
10 |
| SOCIO 8 |
29,471 |
3.18 |
15,379 |
14,092 |
1.09 |
17 |
| SOCIO 10 |
2,461 |
0.27 |
1,151 |
1,310 |
0.88 |
1 |
| SOCIO 3 |
2,423 |
0.26 |
862 |
1,561 |
0.55 |
3 |
| SOCIO 6 |
572 |
0.06 |
5 |
23 |
0.22 |
7 |
Maps and reference table
Maps at municipal level

Reference table - municipal level
use UNICEF_present to filter to municipalities where the Education programme operates
CA01.05 Promocion de mensajes claves para la comunidad escolar is not included
LS0tDQp0aXRsZTogIlJlcG9ydCBvbiBFZHVjYXRpb24gNVcgZGF0YSAtLSBWZW5lenVlbGEiDQphdXRob3I6ICJTZWFuIE5nIg0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCBmb3JtYXQ9JyVkICVCLCAlWScpYCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgY29kZV9kb3dubG9hZDogeWVzDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGggPSAxMCkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHBhbmRlcikNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShmb3JjYXRzKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGdnbWFwKQ0KbGlicmFyeShzZikNCmxpYnJhcnkocGF0Y2h3b3JrKQ0KbGlicmFyeShtYXB0b29scykNCmxpYnJhcnkoZ2dmb3JjZSkNCmxpYnJhcnkoZ2d0aGVtZXMpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KHRpbnl0ZXgpDQpsaWJyYXJ5KHdlYnNob3QpDQoNCiMgcGFuZGVyIHRob3VzYW5kcyBzZXBhcmF0b3INCnBhbmRlck9wdGlvbnMoImJpZy5tYXJrIiwgIiwiKQ0KDQojIE1BS0UgU1VSRSBZT1UgUkVBRCBJTiBUSEUgUklHSFQgRklMRSAtLSBDSEVDSyBUSU1FU1RBTVANCmFjdF9iZW4gPC0gcmVhZF9jc3YoIjIxMTEwOF8wMTEzX2FjdF9iZW4uY3N2IikgDQp1X2JlbiA8LSByZWFkX2NzdigiMjExMTA4XzAxMTNfdV9iZW4uY3N2IikgDQoNCiMgc3VtKGFjdF9iZW4kYmVuZWZpY2lhcmlvcykNCiMgc3VtKHVfYmVuJGJlbmVmaWNpYXJpb3MpDQoNCiMgY2Vuc3VzIHJlZmVyZW5jZSBkYXRhc2V0cw0KY2VuX3JlZiA8LSByZWFkX2V4Y2VsKCJjZW5zdXNfZGF0YV8yMDE5MTEyMi54bHN4Iiwgc2hlZXQgPSAiZGF0YSIpICU+JSANCiAgY2xlYW5fbmFtZXMoKSAlPiUNCiAgc2VsZWN0KGVzdGFkbywgcGNvZGUxLCBtdW5pY2lwaW8sIHBjb2RlMiwgcGFycm9xdWlhLCBwY29kZTMsIGZpZWxkX29mZmljZSwNCiAgICAgICAgIHBvYmxhY2lvbl90b3RhbF8yMDExLCB4XzIwMTlfcG9ibGFjaW9uX3BhcnJvcXVpYWxfdG90YWwsDQogICAgICAgICBoYW1fMjAxOV9hbWJpdG9zX2dlLCBoYW1fMjAxOV94eF9wb2JyZXphX2Vudl9wb3JfcGFycm9xdWlhLCANCiAgICAgICAgIGhhbV8yMDE5X3h4X3BvYmxhY2lvbl9wb2JyZV9wb3JfcGFycm9xdWlhLA0KICAgICAgICAgcG9ibGFjaW9uX2luZmFudGlsX21lbm9yX2RlXzEyX2Fub3MsIHBvYmxhY2lvbl9hZG9sZXNjZW50ZXNfZGVfMTJfYV8xN19hbm9zLA0KICAgICAgICAgcG9ibGFjaW9uX2RlXzE4X2Fub3NfeV9tYXMsIA0KICAgICAgICAgcG9ibGFjaW9uX3VyYmFuYV9wZXJjZW50LCBhcmVhX2ttMiwgZGVuc2lkYWRfcG9ibGFjaW9uYWxfcHBsX2ttMiwNCiAgICAgICAgIG1hdHJpY3VsYV8yMDE3X2VkdWNhY2lvbl9pbmljaWFsLCBtYXRyaWN1bGFfMjAxN19lZHVjYWNpb25fcHJpbWFyaWEsIA0KICAgICAgICAgbWF0cmljdWxhXzIwMTdfZWR1Y2FjaW9uX21lZGlhKQ0KDQojIGZpbHRlcmluZyBvdXQgUFJPTU9DSU9OIE1FTlNBSkVTIENMQVZFUyBQQVJBIExBIENPTVVOSURBRCBFU0NPTEFSDQpDQTEwNSA8LSBhY3RfYmVuICU+JSBmaWx0ZXIoYWN0aXZpZGFkX2NvZGlnbyA9PSAiQ0ExLjA1IikNCg0KIyBjcmVhdGluZyBkYXRhc2V0cyB3aXRob3V0IENBMS4wNSBhbmQNCiMgZm9yIGFjdF9iZW4sIHJlY29kaW5nIFVOSUNFRiBhbmQgbXV0YXRpbmcgc2hvcnQgYWN0aXZpdHkgZGVzY3JpcHRpb25zDQphY3RfYmVuMiA8LSBhY3RfYmVuICU+JSANCiAgZmlsdGVyKGFjdGl2aWRhZF9jb2RpZ28gIT0gIkNBMS4wNSIpICU+JSANCiAgbXV0YXRlKG9yZ2FuaXphY2lvbl9pbXBsZW1lbnRhZG9yYSA9IA0KICAgICAgICAgICBzdHJfcmVwbGFjZV9hbGwob3JnYW5pemFjaW9uX2ltcGxlbWVudGFkb3JhLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTklDRUYgLSBGb25kbyBkZSBsYXMgTmFjaW9uZXMgVW5pZGFzIHBhcmEgbGEgSW5mYW5jaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVOSUNFRiIpKSAlPiUgDQogIG11dGF0ZShhY3RpdmlkYWRfc2hvcnQgPSByZWNvZGUoYWN0aXZpZGFkX2NvZGlnbywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBMS4wMSA9ICIxLjAxX3JlaW5zZXJjaW9uIGVkdWNhdGl2YSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBMS4wMiA9ICIxLjAyX25pdmVsYWNpb24geSBjYXBhY2l0YWNpb24iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQTEuMDMgPSAiMS4wM19raXRzIGVzY29sYXJlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBMS4wNCA9ICIxLjA0X2FsaW1lbnRhY2lvbiBlc2NvbGFyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ExLjA1ID0gIjEuMDVfcHJvbW9jaW9uIG1lbnNhamVzIGNsYXZlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBMS4wNiA9ICIxLjA2X2Fwb3lvIHBzaWNvZWR1Y2F0aXZvIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ExLjA3ID0gIjEuMDdfYWN0aXZpZGFkZXMgcmVjcmVhdGl2YXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQTIuMDggPSAiMi4wOF9lZHVjYWNpb24gYSBkaXN0YW5jaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQTIuMDkgPSAiMi4wOV9mb3JtYWNpb24gZG9jZW50ZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQTIuMTAgPSAiMi4xMF9iZWNhcyBkb2NlbnRlcyIpKQ0KICAgICAgICAgICAgICAgICAgICANCnVfYmVuMiA8LSB1X2JlbiAlPiUgZmlsdGVyKCFzdHJfZGV0ZWN0KC4kdWJpY2FjaW9uLCAiXlJBRElPIikpDQoNCg0KDQpgYGANCg0KJm5ic3A7DQombmJzcDsNCg0KPiBUaGlzIGRlbW8gaXMgYW4gZW50aXJlbHkgYXV0b21hdGVkIHJlcG9ydCAtLSBhbGwgY2hhcnRzIGFuZCB0YWJsZXMsIGFzIHdlbGwgYXMgYWxsIGZpZ3VyZXMgd2l0aGluIHRoZSB0ZXh0IGhhdmUgYmVlbiBnZW5lcmF0ZWQgZnJvbSB0aGUgZGF0YSwgd2l0aCBubyBtYW51YWwgaW5wdXQuIFRoaXMgcmVwb3J0IG1ha2VzIHVzZSBvZiB0aGUgb3V0cHV0cyBnZW5lcmF0ZWQgYnkgYDVXX2NsZWFuaW5nLlJtZGAsIHdoaWNoIGF1dG9tYXRlcyB0aGUgY2xlYW5pbmcgb2YgNVcgZGF0YS4gVGhlIDVXIGRhdGEgdXNlZCBoYXMgaGFkIHBhcnRuZXIgaW5mb3JtYXRpb24gcmVtb3ZlZC4gDQoNCiZuYnNwOyANCg0KIyBTdW1tYXJ5IG9mIGJlbmVmaWNpYXJpZXMgYnkgYWN0aXZpdHksIHdpdGggc2V4IHJhdGlvIA0KDQpgYGB7ciwgc3VtbWFyeSBUQUJMRSAtLSBhY3Rpdml0eSBhbmQgc2V4fQ0KDQojIGFzIGEgbm90ZSwgaSBkb24ndCB0aGluayB5b3UgY2FuIHB1dCBhbiBzdHJfZGV0ZWN0IGluc2lkZSBhIHN1bW1hcmlzZQ0KcGFuZGVyT3B0aW9ucygndGFibGUuc3BsaXQudGFibGUnLCBJbmYpDQoNCnN1bW1hcnlfYWN0IDwtIGFjdF9iZW4yICU+JSANCiAgbXV0YXRlKHNleF9iZW4gPSBpZmVsc2Uoc3RyX2RldGVjdChkZXNhZ3JlZ2FjaW9uLCAiXm0iKSwgIm1hbGUiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2Uoc3RyX2RldGVjdChkZXNhZ3JlZ2FjaW9uLCAiXmYiKSwgImZlbWFsZSIsICJub19lc3AiKSkpICU+JSANCiAgbXV0YXRlKGFjdGl2aWRhZCA9IGFjdGl2aWRhZF9kZXNjKSAlPiUgDQogIGdyb3VwX2J5KGFjdGl2aWRhZCkgJT4lIA0KICBzdW1tYXJpc2UodG90YWwgPSBzdW0oYmVuZWZpY2lhcmlvcywgbmEucm0gPSBUUlVFKSwNCiAgICAgICAgICAgIG1hbGUgPSBzdW0oKGJlbmVmaWNpYXJpb3Nbc2V4X2JlbiA9PSAibWFsZSJdKSksDQogICAgICAgICAgICBmZW1hbGUgPSBzdW0oKGJlbmVmaWNpYXJpb3Nbc2V4X2JlbiA9PSAiZmVtYWxlIl0pKSwNCiAgICAgICAgICAgIHNleF9yYXRpbyA9IHJvdW5kKChtYWxlL2ZlbWFsZSksIGRpZ2l0cyA9IDIpKSAlPiUgDQogIG11dGF0ZShwZXJjZW50X29mX3RvdGFsID0gcm91bmQoKHRvdGFsIC8gc3VtKHRvdGFsKSAqIDEwMCksIGRpZ2l0cyA9IDIpKSAlPiUgDQogIHJlbG9jYXRlKHBlcmNlbnRfb2ZfdG90YWwsIC5hZnRlciA9IHRvdGFsKSAlPiUgDQogIGFycmFuZ2UoZGVzYyh0b3RhbCkpDQoNCnBhbmRlcihzdW1tYXJ5X2FjdCwgYmlnLm1hcmsgPSAiLCIsIHN0eWxlID0gInJtYXJrZG93biIpDQoNCg0KYGBgDQoNCg0KDQo+IEEgdG90YWwgb2YgX19gciBmb3JtYXQocm91bmQoc3VtKHVfYmVuMiRiZW5lZmljaWFyaW9zKSksIGJpZy5tYXJrID0gIiwiKWBfXyBpbmRpdmlkdWFscyBoYXZlIGJlZW4gcmVhY2hlZCB0byBkYXRlLiBJbiB0ZXJtcyBvZiBmcmVxdWVuY2llcyAoaW5jbHVzaXZlIG9mIGRvdWJsZSBjb3VudGluZyksIF9fYHIgZm9ybWF0KHN1bShhY3RfYmVuMiRiZW5lZmljaWFyaW9zKSwgYmlnLm1hcmsgPSAiLCIpYF9fIGhhdmUgYmVlbiByZWFjaGVkLiANCg0KPiBBZGRpdGlvbmFsbHksIHRoZSBfX2ByIGZvcm1hdChzdW0oQ0ExMDUkYmVuZWZpY2lhcmlvcyksIGJpZy5tYXJrID0gIiwiKWBfXyBiZW5lZmljaWFyeSBmcmVxdWVuY2llcyByZWFjaGVkIGJ5IHRoZSBhY3Rpdml0eSBQUk9NT0NJT04gTUVOU0FKRVMgQ0xBVkVTIFBBUkEgTEEgQ09NVU5JREFEIEVTQ09MQVIgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgdG90YWxzIGluIHRoaXMgcmVwb3J0IGFzIHRoZSBhY3Rpdml0eSBjb25zaXN0cyBvZiBzb2xlbHkgcmFkaW8gbWVzc2FnaW5nLiANCg0KJm5ic3A7DQombmJzcDsNCg0KIyBCZW5lZmljaWFyaWVzIGJ5IGFnZQ0KKnVuaXF1ZSBiZW5lZmljaWFyaWVzIG9yIGluZGl2aWR1YWxzKg0KDQpgYGB7ciwgYmVuZWZpY2lhcmllcyBieSBhZ2UgUExPVH0NCm9yZHZlYyA8LSBjKCIwLTMiLCAiMy02IiwgIjctMTIiLCAiMTItMTciLCAiMTgtMTkiLCAibWF5b3JfcXVlXzE5IikNCg0KYWdlX3VfYmVuIDwtIHVfYmVuMiAlPiUgIyBpbXBvcnRhbnQgdG8gdXNlIHVfYmVuIGhlcmUgDQogIG11dGF0ZShhZ2VfYmVuID0gY2FzZV93aGVuKA0KICAgIHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwiMF8zJCIpIH4gIjAtMyIsDQogICAgc3RyX2RldGVjdChkZXNhZ3JlZ2FjaW9uLCIzXzYkIikgfiAiMy02IiwNCiAgICBzdHJfZGV0ZWN0KGRlc2FncmVnYWNpb24sICI3XzEyJCIpIH4gIjctMTIiLCANCiAgICBzdHJfZGV0ZWN0KGRlc2FncmVnYWNpb24sICIxMl8xNyQiKSB+ICIxMi0xNyIsDQogICAgc3RyX2RldGVjdChkZXNhZ3JlZ2FjaW9uLCAiMThfMTkkIikgfiAiMTgtMTkiLA0KICAgIHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwgIm1heW9yZXNfZGVfMTkkIikgfiAibWF5b3JfcXVlXzE5IiwgDQogICAgVFJVRSB+ICJub19lc3AiKSkgJT4lDQogIGZpbHRlcihhZ2VfYmVuICE9ICJub19lc3AiKSAlPiUgDQogIGdyb3VwX2J5KGFnZV9iZW4pICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpb3MgPSBzdW0oYmVuZWZpY2lhcmlvcykpDQoNCmdncGxvdChkYXRhID0gYWdlX3VfYmVuLCBhZXMoeCA9IGZjdF9yZW9yZGVyKGFnZV9iZW4sIG9yZHZlYyksIHkgPSBiZW5lZmljaWFyaW9zKSkgKw0KICBnZW9tX2NvbChmaWxsID0gImNvcm5mbG93ZXJibHVlIikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpjb21tYShiZW5lZmljaWFyaW9zKSksIHZqdXN0ID0gLTAuMjUsIHNpemUgPSA0KSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSB1bml0X2Zvcm1hdCh1bml0ID0gIksiLCBzY2FsZSA9IDFlLTMsIHNlcCA9ICIiKSkgKw0KICB4bGFiKCJHcnVwb3MgcG9yIEVkYWQiKSArIHlsYWIoIkJlbmVmaWNpYXJpb3MiKSArDQogIHRoZW1lKGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApKQ0KDQpgYGANCg0KJm5ic3A7DQoNCiMjIEJlbmVmaWNpYXJpZXMgYnkgYWdlIGNvbXBhcmVkIHRvIDIwMTcgRW5yb2xtZW50DQoNCmBgYHtyIFJFRiBtYXRyaWMgYmVuIH0NCm1hdHJpY19iZW4gPC0gY2VuX3JlZiAlPiUgDQogIHNlbGVjdChtYXRyaWN1bGFfMjAxN19lZHVjYWNpb25faW5pY2lhbCwgbWF0cmljdWxhXzIwMTdfZWR1Y2FjaW9uX3ByaW1hcmlhLCANCiAgICAgICAgIG1hdHJpY3VsYV8yMDE3X2VkdWNhY2lvbl9tZWRpYSkgJT4lDQogIHJlbmFtZSgiMy02IiA9IG1hdHJpY3VsYV8yMDE3X2VkdWNhY2lvbl9pbmljaWFsLA0KICAgICAgICAgIjctMTIiID0gbWF0cmljdWxhXzIwMTdfZWR1Y2FjaW9uX3ByaW1hcmlhLA0KICAgICAgICAgIjEyLTE3IiA9IG1hdHJpY3VsYV8yMDE3X2VkdWNhY2lvbl9tZWRpYSkgJT4lIA0KICBwaXZvdF9sb25nZXIoZXZlcnl0aGluZygpLCBuYW1lc190byA9ICJhZ2VfYmVuIiwgdmFsdWVzX3RvID0gIm1hdHJpY3VsYTIwMTciLCANCiAgICAgICAgICAgICAgIHZhbHVlc19kcm9wX25hID0gVFJVRSkgJT4lIA0KICBncm91cF9ieShhZ2VfYmVuKSAlPiUgDQogIHN1bW1hcmlzZShtYXRyaWN1bGEyMDE3ID0gc3VtKG1hdHJpY3VsYTIwMTcpKSAlPiUNCiAgbGVmdF9qb2luKGFnZV91X2JlbikgJT4lIA0KICBtdXRhdGUocGVyY2VudF90b3RhbCA9IGJlbmVmaWNpYXJpb3MvbWF0cmljdWxhMjAxNyAqIDEwMCkgJT4lIA0KICByZWxvY2F0ZShiZW5lZmljaWFyaW9zLCAuYWZ0ZXIgPSBhZ2VfYmVuKSAlPiUgDQogIHJlbmFtZShgRWRhZCBncnVwb2AgPSBhZ2VfYmVuKSAlPiUgDQogIHNsaWNlKDIsMywxKSAgIyByZWFycmFuZ2luZyByb3dzDQogIA0KYGBgDQoNCj4gV2l0aCByZWZlcmVuY2UgdG8gdGhlIDIwMTcgTWF0cmljdWxhIGRhdGFzZXQsIHdlIGNhbiBzZWUgdGhhdCB0aGUgRWR1Y2F0aW9uIHByb2dyYW1tZSBoYXMgcmVhY2hlZCBhbiBvdmVyYWxsIGF2ZXJhZ2Ugb2YgX19gciByb3VuZChzdW0obWF0cmljX2JlbiRiZW5lZmljaWFyaW9zKS8oc3VtKG1hdHJpY19iZW4kbWF0cmljdWxhMjAxNykpKjEwMClgJV9fIG9mIHNjaG9vbGdvaW5nIGNoaWxkcmVuIGFnZWQgMy0xNyBuYXRpb253aWRlLiBDaGlsZHJlbiBhZ2VkIDMtMTcgY29uc2l0dXRlIF9fYHIgcm91bmQoc3VtKG1hdHJpY19iZW4kYmVuZWZpY2lhcmlvcykvKHN1bSh1X2JlbjIkYmVuZWZpY2lhcmlvcykpKjEwMClgJV9fIG9mIGFsbCBVTklDRUYgYmVuZWZpY2lhcmllcy4gDQoNCmBgYHtyIFRBQkxFIG1hdHJpYyBiZW59DQoNCnBhbmRlcihtYXRyaWNfYmVuLCBiaWcubWFyayA9ICIsIiwgc3R5bGUgPSAicm1hcmtkb3duIikNCg0KYGBgDQoNCg0KJm5ic3A7DQombmJzcDsNCg0KIyBDaGFuZ2VzIHNpbmNlIHByZXZpb3VzIG1vbnRoDQoNCmBgYHtyIFJFRiBjdW11bGF0aXZlIGRhdGFzZXRzfQ0KY3VtX3VfYmVuIDwtIHVfYmVuMiAlPiUgDQogIG11dGF0ZShtZXNfc29sbyA9IGFzLkRhdGUobWVzX3NvbG8pKSAlPiUgDQogIGFycmFuZ2UobWVzX3NvbG8pICU+JSANCiAgZ3JvdXBfYnkobWVzX3NvbG8pICU+JSANCiAgc3VtbWFyaXNlKHN1bV9iZW4gPSBzdW0oYmVuZWZpY2lhcmlvcykpICU+JSANCiAgbXV0YXRlKGN1bXVsYXRpdmUgPSBjdW1zdW0oc3VtX2JlbikpDQoNCmN1bV9hY3RfYmVuIDwtIGFjdF9iZW4yICU+JSANCiAgbXV0YXRlKG1lc19zb2xvID0gYXMuRGF0ZShtZXNfc29sbykpICU+JSANCiAgYXJyYW5nZShtZXNfc29sbykgJT4lIA0KICBncm91cF9ieShtZXNfc29sbykgJT4lIA0KICBzdW1tYXJpc2Uoc3VtX2JlbiA9IHN1bShiZW5lZmljaWFyaW9zKSkgJT4lIA0KICBtdXRhdGUoY3VtdWxhdGl2ZSA9IGN1bXN1bShzdW1fYmVuKSkNCg0KYGBgDQoNCj4gVGhlIG51bWJlciBvZiBpbmRpdmlkdWFscyByZWFjaGVkIGhhcyBpbmNyZWFzZWQgYnkgX19gciBmb3JtYXQoY3VtX3VfYmVuWzExLDNdIC0gY3VtX3VfYmVuWzEwLDNdLCBiaWcubWFyayA9ICIsIilgX18gaW4gdGhlIHBhc3QgbW9udGgsIHJlYWNoaW5nIGEgdG90YWwgb2YgX19gciBmb3JtYXQocm91bmQoc3VtKHVfYmVuMiRiZW5lZmljaWFyaW9zKSksIGJpZy5tYXJrID0gIiwiKWBfXy4gVGhlIG51bWJlciBvZiBiZW5lZmljaWFyeSBmcmVxdWVuY2llcyByZWFjaGVkIGhhcyBpbmNyZWFzZWQgYnkgX19gciBmb3JtYXQoY3VtX2FjdF9iZW5bMTEsM10gLSBjdW1fYWN0X2JlblsxMCwzXSwgYmlnLm1hcmsgPSAiLCIpYF9fIGluIHRoZSBzYW1lIHBlcmlvZCwgcmVhY2hpbmcgYSB0b3RhbCBvZiBfX2ByIGZvcm1hdChzdW0oY3VtX2FjdF9iZW5bMTEsM10pLCBiaWcubWFyayA9ICIsIilgX18uDQoNCmBgYHtyICBjdW11bGF0aXZlIGJlbmVmaWNpYXJpZXMgbGluZSBQTE9UfQ0KdV9iZW4yICU+JSANCiAgbXV0YXRlKG1lc19zb2xvID0gYXMuRGF0ZShtZXNfc29sbykpICU+JSANCiAgYXJyYW5nZShtZXNfc29sbykgJT4lIA0KICBncm91cF9ieShtZXNfc29sbykgJT4lIA0KICBzdW1tYXJpc2Uoc3VtX2JlbiA9IHN1bShiZW5lZmljaWFyaW9zKSkgJT4lIA0KICBtdXRhdGUoY3VtdWxhdGl2ZSA9IGN1bXN1bShzdW1fYmVuKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBtZXNfc29sbywgeSA9IGN1bXVsYXRpdmUpKSArDQogIGdlb21fbGluZSgpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6Y29tbWEoY3VtdWxhdGl2ZSkpLCB2anVzdCA9IC0wLjI1LCBoanVzdCA9IDEsIHNpemUgPSAzKSArDQogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlYi0lWSIsIGRhdGVfYnJlYWtzID0gIjEgbW9udGgiKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnVuaXRfZm9ybWF0KHVuaXQgPSAiSyIsIHNjYWxlID0gMWUtMywgc2VwID0gIiIpLA0KICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gc2VxKDAsOTUwMDAwLCBieSA9IDIwMDAwMCkpICsgIyB3aGF0IGlzIHRoaXMgYnJlYWtzIGRvaW5nPw0KICB4bGFiKCJNZXMgUmVwb3J0YWRvIikgKyB5bGFiKCJCZW5lZmljaWFyaW9zIChjdW11bGF0aXZvKSIpDQpgYGANCg0KJm5ic3A7DQoNCiMjIFByb2dyZXNzIGJ5IGFjdGl2aXR5IGJ5IG1vbnRoDQoqbW91c2Ugb3ZlciB0byBzZWUgZGV0YWlscyoNCg0KPiBQcm9ncmVzcyBpbiByZWNlbnQgbW9udGhzIGhhcyBsYXJnZWx5IGJlZW4gZHVlIHRvIHRoZSBkaXN0cmlidXRpb24gb2YgZWR1Y2F0aW9uIGtpdHMgYW5kIGRpc3RhbmNlIGxlYXJuaW5nLiANCg0KYGBge3IgbGluZSBQTE9UIHByb2dyZXNzIGJ5IGFjdGl2aXR5fQ0KYWN0X2xpbmVzIDwtIGFjdF9iZW4yICU+JSANCiAgbXV0YXRlKG1lc19zb2xvID0gYXMuRGF0ZShtZXNfc29sbykpICU+JSANCiAgZ3JvdXBfYnkoYWN0aXZpZGFkX3Nob3J0LCBtZXNfc29sbykgJT4lIA0KICBzdW1tYXJpc2UoY3VtdWxhdGl2ZSA9IHN1bShiZW5lZmljaWFyaW9zKSkgJT4lIA0KICBtdXRhdGUoY3VtdWxhdGl2ZSA9IHJvdW5kKGN1bXN1bShjdW11bGF0aXZlKSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gbWVzX3NvbG8sIHkgPSBjdW11bGF0aXZlLCBjb2xvdXIgPSBhY3RpdmlkYWRfc2hvcnQpKSArDQogIGdlb21fbGluZSgpICsNCiAgZ2VvbV9wb2ludChzaXplID0gMC43KSArDQogIHNjYWxlX3hfZGF0ZShkYXRlX2xhYmVscyA9ICIlYi0lWSIsIGRhdGVfYnJlYWtzID0gIjEgbW9udGgiKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSB1bml0X2Zvcm1hdCh1bml0ID0gIksiLCBzY2FsZSA9IDFlLTMsIHNlcCA9ICIiKSwgDQogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDAsIDUwMDAwMCkpICsNCiAgeGxhYigiIikgKyB5bGFiKCJCZW5lZmljaWFyaW9zIikgKw0KICBzY2FsZV9jb2xvdXJfZGlzY3JldGUobmFtZSA9ICJBY3RpdmlkYWQiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNikpICsNCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQobnJvdyA9IDIsIGJ5cm93ID0gVFJVRSkpDQoNCmdncGxvdGx5KGFjdF9saW5lcywgdG9vbHRpcCA9IGMoIngiLCAieSIsICJjb2xvdXIiKSkgJT4lIA0KICBsYXlvdXQoc2hvd2xlZ2VuZCA9IFRSVUUsIGxlZ2VuZCA9IGxpc3QoZm9udCA9IGxpc3Qoc2l6ZSA9IDYpKSkgJT4lIA0KICAgY29uZmlnKGRpc3BsYXlNb2RlQmFyID0gRkFMU0UpDQpgYGANCg0KJm5ic3A7DQombmJzcDsNCg0KDQojIFN1bW1hcmllcyBieSBnZW9ncmFwaHkNCg0KIyMgQmVuZWZpY2lhcmllcyBieSBzdGF0ZQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnVfYmVuMiAlPiUgDQogIGdyb3VwX2J5KGVzdGFkbykgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmlvcyA9IHN1bShiZW5lZmljaWFyaW9zKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IGZjdF9yZW9yZGVyKGVzdGFkbywgYmVuZWZpY2lhcmlvcywgLmRlc2MgPSBUUlVFKSwgDQogICAgICAgICAgICAgeSA9IGJlbmVmaWNpYXJpb3MpKSArDQogIGdlb21fY29sKGZpbGwgPSAiY29ybmZsb3dlcmJsdWUiKSArDQogIHlsaW0oMCwgODUwMDAwKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OmNvbW1hKGJlbmVmaWNpYXJpb3MsIGFjY3VyYWN5ID0gMSkpLCANCiAgICAgICAgICAgIHZqdXN0ID0gLTAuMjUsIGhqdXN0ID0gMC4wNSwgc2l6ZSA9IDMsIGFuZ2xlID0gMzApICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHVuaXRfZm9ybWF0KHVuaXQgPSAiSyIsIHNjYWxlID0gMWUtMywgc2VwID0gIiIpLCANCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMCwgMjAwMDAwKSkgKw0KICB4bGFiKCIiKSArIHlsYWIoIkJlbmVmaWNpYXJpb3MiKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQ0KYGBgDQoNCiZuYnNwOw0KDQpgYGB7ciBSRUYgZm9yIHViaWNhY2lvbiB0ZXh0fQ0KbWlyYV96dWwgPC0gdV9iZW4yICU+JSBmaWx0ZXIoZXN0YWRvID09ICJNSVJBTkRBIiB8IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXN0YWRvID09ICJaVUxJQSIpDQpgYGANCg0KIyMgTnVtYmVyIG9mIFNjaG9vbHMgYnkgU3RhdGUNCj4gQSB0b3RhbCBvZiBfX2ByIGZvcm1hdChuX2Rpc3RpbmN0KHVfYmVuMiR1YmljYWNpb24pLCBiaWcubWFyayA9ICIsIilgX18gc2Nob29scyBoYXZlIGJlZW4gcmVhY2hlZCBieSBVTklDRUY7IF9fYHIgcm91bmQoKG5fZGlzdGluY3QobWlyYV96dWwkdWJpY2FjaW9uKSkgLyAobl9kaXN0aW5jdCh1X2JlbjIkdWJpY2FjaW9uKSkgKiAxMDApYCVfXyBhcmUgZnJvbSBNaXJhbmRhIGFuZCBadWxpYSBhbG9uZS4gDQoNCmBgYHtyIFBMT1Qgb2YgdWJpY2FjaW9uIGJ5IHN0YXRlfQ0KdV9iZW4yICU+JSANCiAgZ3JvdXBfYnkoZXN0YWRvKSAlPiUgDQogIGRpc3RpbmN0KHViaWNhY2lvbikgJT4lIA0KICBzdW1tYXJpc2UodWJpY2FjaW9uID0gbigpKSAlPiUgDQogIGdncGxvdChhZXMoeCA9IGZjdF9yZW9yZGVyKGVzdGFkbywgdWJpY2FjaW9uLCAuZGVzYyA9IFRSVUUpLCB5ID0gdWJpY2FjaW9uKSkgKw0KICBnZW9tX2NvbChmaWxsID0gImNvcm5mbG93ZXJibHVlIikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcm91bmQodWJpY2FjaW9uKSksIHZqdXN0ID0gLTAuMjUsIHNpemUgPSAzKSArIA0KICB4bGFiKCIiKSArIHlsYWIoIk51bWVybyBkZSBFc2N1ZWxhcyIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkNCg0KYGBgDQoNCiZuYnNwOw0KDQpgYGB7ciBSRUYgZm9yIGFsbF9tdW59DQoNCiMgYWxsX211biBpcyBvbmUgb2JzIHBlciBwY29kZTINCmFsbF9tdW4gPC0gdV9iZW4yICU+JSANCiAgbXV0YXRlKGlzX21hdHJpYyA9IGNhc2Vfd2hlbiggIyBmb3IgYmVuZWZpY2lhcmllcyBhZ2VkIDMtMTcNCiAgICAgICAgc3RyX2RldGVjdChkZXNhZ3JlZ2FjaW9uLCIzXzYkIikgfiAibWF0cmljIiwNCiAgICAgICAgc3RyX2RldGVjdChkZXNhZ3JlZ2FjaW9uLCI3XzEyJCIpIH4gIm1hdHJpYyIsDQogICAgICAgIHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwiMTJfMTckIikgfiAibWF0cmljIiwNCiAgICAgICAgVFJVRSB+ICJub25fbWF0cmljIikpICU+JSANCiAgbXV0YXRlKGJlbmVmaWNpYXJpb3NfM18xNyA9IGlmZWxzZShpc19tYXRyaWMgPT0gIm1hdHJpYyIsIGJlbmVmaWNpYXJpb3MsIDApKSAlPiUgDQogIGdyb3VwX2J5KGVzdGFkbywgbXVuaWNpcGlvLCBwY29kZTIpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpb3MgPSByb3VuZChzdW0oYmVuZWZpY2lhcmlvcykpLA0KICAgICAgICAgICAgYmVuZWZpY2lhcmlvc18zXzE3ID0gcm91bmQoc3VtKGJlbmVmaWNpYXJpb3NfM18xNykpKSAlPiUNCiAgdW5ncm91cCgpICU+JSANCiAgbGVmdF9qb2luKGFjdF9iZW4gJT4lICMgYnJpbmdpbmcgYWN0aXZpdHkgY291bnRzIGludG8gdV9iZW4NCiAgICAgICAgICAgIGdyb3VwX2J5KHBjb2RlMikgJT4lIA0KICAgICAgICAgICAgc3VtbWFyaXNlKGFjdF90eXBlcyA9IG5fZGlzdGluY3QoYWN0aXZpZGFkX2NvZGlnbykpKSAlPiUgDQogIHJpZ2h0X2pvaW4oY2VuX3JlZiAlPiUgIyBmb3IgYnJpbmdpbmcgbWF0cmljdWxhMjAxNyBpbnRvIGFsbF9tdW4NCiAgICAgICAgICAgIHBpdm90X2xvbmdlcihjb2xzID0gYygibWF0cmljdWxhXzIwMTdfZWR1Y2FjaW9uX2luaWNpYWwiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hdHJpY3VsYV8yMDE3X2VkdWNhY2lvbl9wcmltYXJpYSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hdHJpY3VsYV8yMDE3X2VkdWNhY2lvbl9tZWRpYSIpLCANCiAgICAgICAgICAgICAgICAgICAgIG5hbWVzX3RvID0gImFnZV9iZW4iLCB2YWx1ZXNfdG8gPSAibWF0cmljdWxhMjAxNyIsIA0KICAgICAgICAgICAgICAgICAgICAgdmFsdWVzX2Ryb3BfbmEgPSBUUlVFKSAlPiUgDQogICAgICAgICAgICBzZWxlY3QocGNvZGUyLCBhZ2VfYmVuLCBtYXRyaWN1bGEyMDE3KSAlPiUgDQogICAgICAgICAgICBncm91cF9ieShwY29kZTIpICU+JSANCiAgICAgICAgICAgIHN1bW1hcmlzZShtYXRyaWN1bGEyMDE3ID0gc3VtKG1hdHJpY3VsYTIwMTcpKSkgJT4lIA0KICBtdXRhdGUoY292ZXJhZ2VfcGVyY2VudCA9IHJvdW5kKGJlbmVmaWNpYXJpb3NfM18xNyAvIG1hdHJpY3VsYTIwMTcgKiAxMDApKSAlPiUgDQogIG11dGF0ZShlc3RhZG8gPSBmY3RfcmVvcmRlcihlc3RhZG8sIGJlbmVmaWNpYXJpb3MsIC5kZXNjID0gVFJVRSkpICU+JSANCiAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpb3MpKQ0KDQpgYGANCg0KIyMgU2NhdHRlcnBsb3Qgb2YgTXVuaWNpcGFsaXRpZXMNCipsb2dhcml0aG1pYyBzY2FsZTsgbGFyZ2VyIHBvaW50cyBpbmRpY2F0ZSBtb3JlIGJlbmVmaWNpYXJpZXMgcmVhY2hlZCwgZGFya2VyIGJsdWVzIGluZGljYXRlIG1vcmUgYWN0aXZpdHkgdHlwZXMqIA0KDQoqbW91c2Ugb3ZlciBtdW5pY2lwYWxpdGllcyB0byBzZWUgYmVuZWZpY2lhcmllcyBhbmQgZGlzdGluY3QgYWN0aXZpdGllcyoNCg0KPiBBIHRvdGFsIG9mIF9fYHIgbl9kaXN0aW5jdCh1X2JlbjIkcGNvZGUyKWBfXyBtdW5pY2lwYWxpdGllcyB3ZXJlIHJlYWNoZWQgYnkgdGhlIFVOSUNFRiBFZHVjYXRpb24gcHJvZ3JhbW1lLg0KDQpgYGB7ciBzY2F0dGVyUExPVCBvZiBtdW5pY2lwYWxpdGllcyBieSBzdGF0ZX0NCg0KYWxsX211bl9wb2ludHMgPC0gYWxsX211biAlPiUgDQogIGdncGxvdChhZXModGV4dCA9IG11bmljaXBpbywgeCA9IGVzdGFkbywgeSA9IGJlbmVmaWNpYXJpb3MsIA0KICAgICAgICAgICAgIGNvbG91ciA9IGFjdF90eXBlcykpICsNCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IGJlbmVmaWNpYXJpb3MpLCBhbHBoYSA9IDAuOSkgKw0KICBzY2FsZV9jb2xvdXJfZ3JhZGllbnQobG93ID0gImF6dXJlNCIsIGhpZ2ggPSAiZGFya2JsdWUiKSArDQogIHNjYWxlX3lfY29udGludW91cyh0cmFucyA9ICJsb2cxMCIsIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gY29tbWEpICsNCiAgeGxhYigiIikgKyB5bGFiKCJCZW5lZmljaWFyaW9zIEFsY2FuemFkb3MgcG9yIE11bmljaXBpbyIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpIA0KDQpnZ3Bsb3RseShhbGxfbXVuX3BvaW50cywgdG9vbHRpcCA9IGMoInRleHQiLCAieSIsICJjb2xvdXIiKSkgJT4lIA0KICBjb25maWcoZGlzcGxheU1vZGVCYXIgPSBGQUxTRSkNCg0KYGBgDQoNCiZuYnNwOw0KDQojIyBUb3AgMTAgbXVuaWNpcGFsaXRpZXMgYnkgcmVhY2ggYW5kIGNvdmVyYWdlDQoNCmBgYHtyIG11bmljaXBhbGl0aWVzIHRvcCBUQUJMRX0NCiMgdG9wIG11bmljaXBhbGl0aWVzIHRhYmxlDQp0b3BfbXVuIDwtIGFsbF9tdW4gJT4lIHNlbGVjdChlc3RhZG8sIG11bmljaXBpbywgYmVuZWZpY2lhcmlvcykgJT4lIHNsaWNlKDE6MTApDQoNCiMgdHJ5IHRvIG1ha2UgYSB0YWJsZSBvZiB0aGUgbW9zdCBvdmVyc3Vic2NyaWJlZCBtdW5pY2lwYWxpdGllcw0KdG9wX2NvdiA8LSBhbGxfbXVuICU+JSBhcnJhbmdlKGRlc2MoY292ZXJhZ2VfcGVyY2VudCkpICU+JSANCiAgc2VsZWN0KGVzdGFkbywgbXVuaWNpcGlvLCBjb3ZlcmFnZV9wZXJjZW50KSAlPiUgc2xpY2UoMToxMCkNCg0KIyB0d28gdGFibGVzIHNpZGUgYnkgc2lkZQ0Ka2FibGUodG9wX211biwgY2FwdGlvbiA9ICJieSBiZW5lZmljaWFyaWVzIikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAiYm9yZGVyZWQiLCBmdWxsX3dpZHRoID0gRkFMU0UsIHBvc2l0aW9uID0gImZsb2F0X2xlZnQiKQ0Ka2FibGUodG9wX2NvdiwgY2FwdGlvbiA9ICJieSBjb3ZlcmFnZSIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gImJvcmRlcmVkIiwgZnVsbF93aWR0aCA9IEZBTFNFLCBwb3NpdGlvbiA9ICJsZWZ0IikgDQoNCiMgc3VtIG9mIHRvcCB0ZW4NCnRvcF9tdW5fc3VtIDwtIGFsbF9tdW4gJT4lIA0KICBzbGljZSgxOjEwKSAlPiUgc3VtbWFyaXNlKHN1bSA9IHN1bShiZW5lZmljaWFyaW9zLCBuYS5ybSA9IFRSVUUpKQ0KDQphbGxfbXVuX3N1bSA8LSBhbGxfbXVuICU+JSANCiAgc3VtbWFyaXNlKHN1bSA9IHN1bShiZW5lZmljaWFyaW9zLCBuYS5ybSA9IFRSVUUpKQ0KDQpgYGANCg0KPiBUb2dldGhlciwgdGhlIDEwIG11bmljaXBhbGl0aWVzIHdpdGggdGhlIGhpZ2hlc3QgcmVhY2ggKGFib3ZlIGxlZnQpIGZvcm0gX19gciByb3VuZCh0b3BfbXVuX3N1bSAvIGFsbF9tdW5fc3VtICogMTAwKWAlX18gb2YgdGhlIF9fYHIgZm9ybWF0KHN1bShhbGxfbXVuJGJlbmVmaWNpYXJpb3MsIG5hLnJtID0gVFJVRSksIGJpZy5tYXJrID0gIiwiKWBfXyBiZW5lZmljaWFyaWVzIHJlYWNoZWQuIFRoZSBhdmVyYWdlIGNvdmVyYWdlIG9mIHRoZSBzY2hvb2wtYWdlIHBvcHVsYXRpb24gaW4gdGhlIG11bmljaXBhbGl0aWVzIHdoZXJlIFVOSUNFRiBpcyBwcmVzZW50IGlzIF9fYHIgcm91bmQobWVhbihhbGxfbXVuJGNvdmVyYWdlX3BlcmNlbnQsIG5hLnJtID0gVFJVRSkpYCVfXy4gQ292ZXJhZ2UgcmVmZXJzIHRvIHRoZSBwZXJjZW50YWdlIG9mIGVucm9sbGVkIGNoaWxkcmVuIChhZ2VkIDMtMTcgeWVhcnMpIHJlYWNoZWQgYnkgVU5JQ0VGLiANCg0KJm5ic3A7DQoNCiMjIEhpc3RvZ3JhbSBvZiBDb3ZlcmFnZQ0KDQo+IEJlbG93IGlzIGEgaGlzdG9ncmFtIG9mIG11bmNpaXBhbGl0aWVzIHdoZXJlIFVOSUNFRiBpcyBwcmVzZW50IHNob3dpbmcgdGhlIGNvdmVyYWdlIG9mIGVucm9sbGVkIGNoaWxkcmVuIChhZ2VkIDMtMTcpLiBPZiBub3RlLCB3ZSBoYXZlIHJlYWNoZWQgMTAlIG9yIGxlc3Mgb2YgdGhlIHBvcHVsYXRpb24gaW4gX19gciBzdW0oYWxsX211biRjb3ZlcmFnZV9wZXJjZW50IDw9IDEwLCBuYS5ybSA9IFRSVUUpYF9fIG91dCBvZiB0aGUgX19gciBuX2Rpc3RpbmN0KHVfYmVuMiRwY29kZTIpYF9fIGluIHdoaWNoIHdlIG9wZXJhdGUuIFRoaXMgaXMgaW4gYWRkaXRpb24gdG8gdGhlIF9fYHIgc3VtKGlzLm5hKGFsbF9tdW4kY292ZXJhZ2VfcGVyY2VudCkpYF9fIHdoZXJlIG5vIFVOSUNFRiBFZHVjYXRpb24gYWN0aXZpdGllcyBoYXZlIG9jY3VycmVkLiANCg0KYGBge3IgUExPVCBoaXN0b2dyYW0gb2YgY292ZXJhZ2V9DQphbGxfbXVuICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gY292ZXJhZ2VfcGVyY2VudCkpICsNCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSA1LCBjb2xvdXIgPSAiYmxhY2siLCBmaWxsID0gIndoaXRlIikgKw0KICBzdGF0X2JpbihiaW53aWR0aCA9IDUsIGdlb20gPSAidGV4dCIsIGFlcyhsYWJlbCA9IC4uY291bnQuLiksIHZqdXN0ID0gLTAuNSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gYygwLCAxMCwgMjAsIDMwLCA0MCwgNTAsIDYwLCA3MCwgODAsIDkwKSkgKw0KICB5bGFiKCJOdW1iZXIgb2YgbXVuaWNpcGFsaXRpZXMiKSArIHhsYWIoIlBlcmNlbnQgb2YgZW5yb2xsZWQgY2hpbGRyZW4gKDMtMTcpIGNvdmVyZWQiKQ0KDQpgYGANCg0KJm5ic3A7DQombmJzcDsNCg0KIyBSZXBvcnRzIGFib3V0IFBhcnRuZXJzDQoNCiMjIFN1bW1hcnkgYnkgUGFydG5lcg0KDQpgYGB7ciBQTE9UIHN0YWNrZWQgYmFyIHBhcnRuZXJ9DQpzdGFja19hcnIgPC0gYWN0X2JlbjIgJT4lIA0KICBncm91cF9ieShvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEpICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsID0gc3VtKGJlbmVmaWNpYXJpb3MpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyh0b3RhbCkpDQoNCm9yZF9zb2MgPC0gYygiVU5JQ0VGIiwgIlNPQ0lPIDEiLCAiU09DSU8gMiIsICJTT0NJTyA0IiwgIlNPQ0lPIDUiLCAiU09DSU8gNyIsICJTT0NJTyA4IiwNCiAgICAgICAgICAgICAiU09DSU8gMyIsICJTT0NJTyAxMCIsICJTT0NJTyA2IikNCg0Kc29jX3N0YWNrIDwtIGFjdF9iZW4yICU+JSANCiAgZ3JvdXBfYnkoYWN0aXZpZGFkX3Nob3J0LCBvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpb3MgPSByb3VuZChzdW0oYmVuZWZpY2lhcmlvcykpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gb3JnYW5pemFjaW9uX2ltcGxlbWVudGFkb3JhLCANCiAgICAgICAgICAgICB5ID0gYmVuZWZpY2lhcmlvcykpICsNCiAgZ2VvbV9jb2woYWVzKGZpbGwgPSBhY3RpdmlkYWRfc2hvcnQpKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSB1bml0X2Zvcm1hdCh1bml0ID0gIksiLCBzY2FsZSA9IDFlLTMsIHNlcCA9ICIiKSwgDQogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKDAsIDQwMDAwMCkpICsNCiAgeGxhYigiIikgKyB5bGFiKCJCZW5lZmljaWFyaW9zIikgKyANCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSwNCiAgICAgICAgbGVnZW5kLmtleS5zaXplID0gdW5pdCgwLjEsICJjbSIpLA0KICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwNCiAgICAgICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDYpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgpKSArDQogIHNjYWxlX2ZpbGxfZGlzY3JldGUobmFtZSA9ICJBY3RpdmlkYWQiKSArDQogIGdlb21fdGV4dChkYXRhID0gc3RhY2tfYXJyLCBhZXMoeSA9IHRvdGFsICsgNjAwMCwgbGFiZWwgPSBzY2FsZXM6OmNvbW1hKHRvdGFsKSksIA0KICAgICAgICAgICAgc2l6ZSA9IDMpICsNCiAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBvcmRfc29jKQ0KDQpnZ3Bsb3RseShzb2Nfc3RhY2ssIHRvb2x0aXAgPSBjKCJ4IiwgImZpbGwiLCAieSIpKSAlPiUgDQogIGxheW91dChsZWdlbmQgPSBsaXN0KHRpdGxlID0gbGlzdCh0ZXh0ID0gIjxiPiBvcmdhbml6YWNpb24gPGI+IikpKSAlPiUgDQogIGNvbmZpZyhkaXNwbGF5TW9kZUJhciA9IEZBTFNFKSAlPiUgDQogIGxheW91dChzaG93bGVnZW5kID0gVFJVRSwgbGVnZW5kID0gbGlzdChmb250ID0gbGlzdChzaXplID0gNikpKQ0KDQpgYGANCg0KJm5ic3A7DQoNCiMjIE51bWJlciBvZiBkaWZmZXJlbnQgYWN0aXZpdGllcyBpbXBsZW1lbnRlZCBieSBlYWNoIHBhcnRuZXINCg0KYGBge3IgVEFCTEUgcGFydG5lciBhY3Rpdml0eSBjb3VudH0NCg0KcGFuZGVyT3B0aW9ucygndGFibGUuc3BsaXQudGFibGUnLCBJbmYpDQoNCmFjdF9iZW4gJT4lIA0KICBtdXRhdGUob3JnYW5pemFjaW9uX2ltcGxlbWVudGFkb3JhID0gDQogICAgICAgICAgIHN0cl9yZXBsYWNlX2FsbChvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVOSUNFRiAtIEZvbmRvIGRlIGxhcyBOYWNpb25lcyBVbmlkYXMgcGFyYSBsYSBJbmZhbmNpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiVU5JQ0VGIikpICU+JSANCiAgcmVuYW1lKHBhcnRuZXIgPSBvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEpICU+JSANCiAgZ3JvdXBfYnkocGFydG5lcikgJT4lIA0KICBzdW1tYXJpc2UobnVtX2FjdGl2aXRpZXMgPSBuX2Rpc3RpbmN0KGFjdGl2aWRhZF9jb2RpZ28pKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhudW1fYWN0aXZpdGllcykpICU+JSANCiAgdCgpICU+JSANCiAgcGFuZGVyKCkNCg0KYGBgDQoNCiZuYnNwOw0KDQojIyBQYXJ0bmVycycgcHJvZ3Jlc3Mgb3ZlciB0aW1lDQoqbW91c2Ugb3ZlciBmb3IgZGV0YWlscyoNCg0KYGBge3IgbGluZSBQTE9UIHBhcnRuZXJzIHByb2dyZXNzfQ0Kc29jX2xpbmUgPC0gYWN0X2JlbjIgJT4lIA0KICBtdXRhdGUobWVzX3NvbG8gPSBhcy5EYXRlKG1lc19zb2xvKSkgJT4lIA0KICBncm91cF9ieShvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEsIG1lc19zb2xvKSAlPiUgDQogIHN1bW1hcmlzZShjdW11bGF0aXZlID0gcm91bmQoc3VtKGJlbmVmaWNpYXJpb3MpKSkgJT4lIA0KICBtdXRhdGUoY3VtdWxhdGl2ZSA9IGN1bXN1bShjdW11bGF0aXZlKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBtZXNfc29sbywgeSA9IGN1bXVsYXRpdmUsIGNvbG91ciA9IG9yZ2FuaXphY2lvbl9pbXBsZW1lbnRhZG9yYSkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBnZW9tX3BvaW50KHNpemUgPSAwLjcpICsNCiAgc2NhbGVfeF9kYXRlKGRhdGVfbGFiZWxzID0gIiViLSVZIiwgZGF0ZV9icmVha3MgPSAiMSBtb250aCIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHVuaXRfZm9ybWF0KHVuaXQgPSAiSyIsIHNjYWxlID0gMWUtMywgc2VwID0gIiIpLCANCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoMCwgNDEwMDAwKSkgKw0KICB4bGFiKCIiKSArIHlsYWIoIkJlbmVmaWNpYXJpb3MiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLA0KICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNiksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gOCkpDQoNCmdncGxvdGx5KHNvY19saW5lLCB0b29sdGlwID0gYygieCIsICJ5IiwgImNvbG91ciIpKSAlPiUgDQogIGxheW91dChsZWdlbmQgPSBsaXN0KHRpdGxlID0gbGlzdCh0ZXh0ID0gIjxiPiBvcmdhbml6YWNpb24gPGI+IikpKSAlPiUgDQogIGNvbmZpZyhkaXNwbGF5TW9kZUJhciA9IEZBTFNFKQ0KICANCmBgYA0KDQombmJzcDsNCg0KIyMgU3VtbWFyeSB0YWJsZSBhYm91dCBwYXJ0bmVycycgYWNoaWV2ZW1lbnRzDQoNCmBgYHtyIFRBQkxFIHBhcnRuZXJzIHN1bW1hcnl9DQphY3RfYmVuMiAlPiUgDQogIG11dGF0ZShzZXhfYmVuID0gaWZlbHNlKHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwgIl5tIiksICJtYWxlIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKHN0cl9kZXRlY3QoZGVzYWdyZWdhY2lvbiwgIl5mIiksICJmZW1hbGUiLCAibm9fZXNwIikpKSAlPiUgDQogIG11dGF0ZShhY3RpdmlkYWQgPSBhY3RpdmlkYWRfZGVzYykgJT4lIA0KICBncm91cF9ieShvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEpICU+JSANCiAgc3VtbWFyaXNlKG1hbGUgPSBzdW0oKGJlbmVmaWNpYXJpb3Nbc2V4X2JlbiA9PSAibWFsZSJdKSksDQogICAgICAgICAgICBmZW1hbGUgPSBzdW0oKGJlbmVmaWNpYXJpb3Nbc2V4X2JlbiA9PSAiZmVtYWxlIl0pKSwNCiAgICAgICAgICAgIHNleF9yYXRpbyA9IHJvdW5kKChtYWxlL2ZlbWFsZSksIGRpZ2l0cyA9IDIpLA0KICAgICAgICAgICAgYmVuZWZpY2lhcmlvcyA9IHN1bShiZW5lZmljaWFyaW9zLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShwZXJjZW50X29mX3RvdGFsID0gcm91bmQoKGJlbmVmaWNpYXJpb3MgLyBzdW0oYmVuZWZpY2lhcmlvcykgKiAxMDApLCBkaWdpdHMgPSAyKSkgJT4lIA0KICBsZWZ0X2pvaW4oYWN0X2JlbiAlPiUgDQogICAgICAgICAgICAgIG11dGF0ZShvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEgPSANCiAgICAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKG9yZ2FuaXphY2lvbl9pbXBsZW1lbnRhZG9yYSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAiVU5JQ0VGIC0gRm9uZG8gZGUgbGFzIE5hY2lvbmVzIFVuaWRhcyBwYXJhIGxhIEluZmFuY2lhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJVTklDRUYiKSkgJT4lIA0KICAgICAgICAgICAgICBncm91cF9ieShvcmdhbml6YWNpb25faW1wbGVtZW50YWRvcmEpICU+JSANCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG11bmljaXBhbGl0aWVzID0gbl9kaXN0aW5jdChwY29kZTIpKSwgDQogICAgIGJ5ID0gIm9yZ2FuaXphY2lvbl9pbXBsZW1lbnRhZG9yYSIpICU+JSANCiAgcmVsb2NhdGUoYmVuZWZpY2lhcmlvcywgLmFmdGVyID0gb3JnYW5pemFjaW9uX2ltcGxlbWVudGFkb3JhKSAlPiUgDQogIHJlbG9jYXRlKHBlcmNlbnRfb2ZfdG90YWwsIC5hZnRlciA9IGJlbmVmaWNpYXJpb3MpICU+JSANCiAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpb3MpKSAlPiUgDQogIHBhbmRlcihiaWcubWFyayA9ICIsIiwgc3R5bGUgPSAicm1hcmtkb3duIikNCmBgYA0KDQoNCiZuYnNwOw0KJm5ic3A7DQoNCiMgTWFwcyBhbmQgcmVmZXJlbmNlIHRhYmxlDQoNCiZuYnNwOw0KDQojIyBNYXBzIGF0IG11bmljaXBhbCBsZXZlbA0KYGBge3IgTUFQUyBtdW5pY2lwYWwgcmVhY2hlZCBhbmQgcGVyY2VudCByZWFjaGVkfQ0KIyBxdWlldCA9IFRSVUUgaXMgdmVyeSBpbXBvcnRhbnQgaGVyZQ0KcGNvZGUyX3NoYXBlIDwtIHN0X3JlYWQoIkM6L1VzZXJzL1NlYW4gTmcvRG9jdW1lbnRzL1IvNVcvdm56X2FkbTJfc2hhcGVmaWxlcy92ZW5fYWRtYm5kYV9hZG0yXzIwMTgwNTAyLnNocCIsIHF1aWV0ID0gVFJVRSkgJT4lIA0KICByZW5hbWUocGNvZGUxID0gQURNMV9QQ09ERSwNCiAgICAgICAgIHBjb2RlMiA9IEFETTJfUENPREUpDQoNCiMgSSB0aGluayBwbG90bHkncyBzZWxlY3RvciB0b29sIGlzIG5vdCB2ZXJ5IGdvb2QuIG9yIG1heWJlIHRoZSBjb29yZGluYXRlcw0KIyBvZiB0aGUgdmVuX2FkbWJuZGEgZGF0YXNldCBpcyBub3QgdmVyeSBnb29kLCBhdCBsZWFzdCB3aGVuIGl0IGNvbWVzIHRvIGNlbnRyb2lkcy4gDQoNCm11bl9iZW5fcGxvdCA8LSBhbGxfbXVuICU+JSANCiAgcmlnaHRfam9pbihwY29kZTJfc2hhcGUpICU+JSANCiAgc3RfYXNfc2YoKSAlPiUgDQogIGdncGxvdChhZXMoZmlsbCA9IGJlbmVmaWNpYXJpb3MpKSArDQogIGdlb21fc2Yoc2l6ZSA9IDAuMDEpICsNCiAgdGhlbWVfdm9pZCgpICsNCiAgZ2d0aXRsZSgiTnVtYmVyIG9mIGJlbmVmaWNpYXJpZXMgcmVhY2hlZCBieSBtdW5pY2lwYWxpdHkiKSArDQogIHNjYWxlX2ZpbGxfZ3JhZGllbnQodHJhbnMgPSB0cmFuc19yZXZlcnNlcigibG9nIiksIGJyZWFrcyA9IGMoMCwgMTAwLCAxMDAwLCAxMDAwMCwgODA0ODIpLA0KICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGNvbW1hLCBuYS52YWx1ZSA9ICJncmF5OTAiKSArDQogIHRoZW1lKGxlZ2VuZC5rZXkuc2l6ZSA9IHVuaXQoMC4zLCAiY20iKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gYygwLjksIDAuMSksDQogICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpKQ0KDQoNCm11bl9wZXJjZW50X3Bsb3QgPC0gYWxsX211biAlPiUgDQogIHJpZ2h0X2pvaW4ocGNvZGUyX3NoYXBlKSAlPiUgDQogIHN0X2FzX3NmKCkgJT4lDQogIGdncGxvdChhZXMoZmlsbCA9IGNvdmVyYWdlX3BlcmNlbnQpKSsNCiAgZ2VvbV9zZihzaXplID0gMC4wMSkgKw0KICB0aGVtZV92b2lkKCkgKw0KICBnZ3RpdGxlKCJQZXJjZW50IG9mIGVucm9sbGVkIGNoaWxkcmVuICgzLTE3KSByZWFjaGVkIGJ5IG11bmljaXBhbGl0eSIpICsNCiAgc2NhbGVfZmlsbF9ncmFkaWVudChsYWJlbHMgPSBjb21tYSwgdHJhbnMgPSAicmV2ZXJzZSIsIG5hLnZhbHVlID0gImdyYXk5MCIpKw0KICB0aGVtZShsZWdlbmQua2V5LnNpemUgPSB1bml0KDAuMywgImNtIiksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9IGMoMC45LCAwLjEpLA0KICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksIA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMikpDQoNCiMgdXNpbmcgcGF0Y2h3b3JrIHRvIHB1dCB0aGVtIHNpZGUgYnkgc2lkZSANCg0KbXVuX2Jlbl9wbG90ICsgbXVuX3BlcmNlbnRfcGxvdCArIHBsb3RfbGF5b3V0KG5jb2wgPSAyKQ0KDQpgYGANCg0KJm5ic3A7DQombmJzcDsNCg0KIyMgUmVmZXJlbmNlIHRhYmxlIC0gbXVuaWNpcGFsIGxldmVsDQoNCl9fdXNlIGBVTklDRUZfcHJlc2VudGAgdG8gZmlsdGVyIHRvIG11bmljaXBhbGl0aWVzIHdoZXJlIHRoZSBFZHVjYXRpb24gcHJvZ3JhbW1lIG9wZXJhdGVzX18NCg0KKkNBMDEuMDUgUHJvbW9jaW9uIGRlIG1lbnNhamVzIGNsYXZlcyBwYXJhIGxhIGNvbXVuaWRhZCBlc2NvbGFyIGlzIG5vdCBpbmNsdWRlZCoNCg0KYGBge3IgRFQgZGF0YXRhYmxlfQ0KIyBpdCBzaG93cyAzMzUsIHNob3VsZG4ndCB0aGVyZSBiZSAzMzY/IEkgYmV0IGl0J3MgVmFyZ2FzIGFnYWluDQphbGxfbXVuICU+JSANCiAgbXV0YXRlKFVOSUNFRl9wcmVzZW50ID0gaWZlbHNlKGlzLm5hKGJlbmVmaWNpYXJpb3MpLCBGQUxTRSwgVFJVRSkpICU+JSANCiAgcmVuYW1lKG5vX29mX2FjdGl2aXRpZXMgPSBhY3RfdHlwZXMpICU+JSAjIEkgZmVlbCBsaWtlIHlvdSBzaG91bGQgaGF2ZSBkb25lIHRoaXMgZWFybGllcg0KICBsZWZ0X2pvaW4oY2VuX3JlZiAlPiUgIyBhZGRpdGlvbmFsIGNlbnN1cyB2YXJpYWJsZXMNCiAgICAgIGdyb3VwX2J5KHBjb2RlMikgJT4lIA0KICAgICAgc3VtbWFyaXNlKHBvb3JfcGVyc29ucyA9IHJvdW5kKHN1bShoYW1fMjAxOV94eF9wb2JsYWNpb25fcG9icmVfcG9yX3BhcnJvcXVpYSkpLA0KICAgICAgICAgICAgICAgIHRvdGFsX3BvcCAgICA9IHN1bSh4XzIwMTlfcG9ibGFjaW9uX3BhcnJvcXVpYWxfdG90YWwpKSAlPiUgDQogICAgICBtdXRhdGUocG92ZXJ0eV9pbmNpZGVuY2UgPSByb3VuZChwb29yX3BlcnNvbnMgLyB0b3RhbF9wb3AgKiAxMDApKSkgJT4lIA0KICBzZWxlY3QoIXBjb2RlMikgJT4lDQogIHJlbG9jYXRlKFVOSUNFRl9wcmVzZW50KSAlPiUgDQogIHJlbG9jYXRlKHBvdmVydHlfaW5jaWRlbmNlLCAuYWZ0ZXIgPSBjb3ZlcmFnZV9wZXJjZW50KSAlPiUgDQogIHJlbG9jYXRlKG5vX29mX2FjdGl2aXRpZXMsIC5hZnRlciA9IHBvdmVydHlfaW5jaWRlbmNlKSAlPiUNCiAgZGF0YXRhYmxlKGZpbHRlciA9ICJ0b3AiLCBvcHRpb25zID0gbGlzdChwYWdlTGVuZ3RoID0gMTAsIHNjcm9sbFggPSBUUlVFKSkNCiAgDQpgYGANCg0KDQo=